/**
 * 
 */
package br.com.skynix.tcmc.model.enumeration;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.EnumSet;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import br.com.skynix.tcmc.base.enumeration.EntidadeEnumerada;

/**
 * @author davi
 * 
 */
public enum TipoContaEnum implements EntidadeEnumerada {
	CLIENTE_CARTEIRA("CL", "Cliente Carteira", "Cliente da Carteira"), //
	PROSPECT("PO", "Prospect", "Cliente de Prospecção"), //
	PARCEIRO("PA", "Parceiro", "Parceiro"), //
	CONCORRENTE("CO", "Concorrente", "Concorrente"), //
	FORNECEDOR("FO", "Fornecedor", "Fornecedor");

	private static Map<String, TipoContaEnum> tipos = new HashMap<String, TipoContaEnum>();
	static {
		for (TipoContaEnum tp : EnumSet.allOf(TipoContaEnum.class)) {
			tipos.put(tp.getCodigo(), tp);
		}
	}

	private String codigo;

	private String textoCurto;

	private String textoLongo;

	/**
	 * @param codigo
	 * @param textoCurto
	 * @param textoLongo
	 */
	private TipoContaEnum(String codigo, String textoCurto, String textoLongo) {
		this.codigo = codigo;
		this.textoCurto = textoCurto;
		this.textoLongo = textoLongo;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see br.com.skynix.tcmc.base.enumeration.EntidadeEnumerada#getCodigo()
	 */
	@Override
	public String getCodigo() {
		return codigo;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * br.com.skynix.tcmc.base.enumeration.EntidadeEnumerada#getTextoCurto()
	 */
	@Override
	public String getTextoCurto() {
		return textoCurto;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * br.com.skynix.tcmc.base.enumeration.EntidadeEnumerada#getTextoLongo()
	 */
	@Override
	public String getTextoLongo() {
		return textoLongo;
	}

	public static TipoContaEnum getTipo(String codTipo) {
		return tipos.get(codTipo);
	}

	public static Collection<TipoContaEnum> listAll() {
		List<TipoContaEnum> listaTipos = new ArrayList<TipoContaEnum>(
				tipos.values());
		Collections.sort(listaTipos, new Comparator<TipoContaEnum>() {
			@Override
			public int compare(TipoContaEnum t1, TipoContaEnum t2) {
				return t1.getCodigo().compareTo(t2.getCodigo());
			}
		});
		return listaTipos;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see java.lang.Enum#toString()
	 */
	@Override
	public String toString() {
		return codigo;
	}
}
